home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: Greatest Hits 1996 / Amiga Games: Greatest Hits 1996.iso / archive / userbox / publicdomain / engclock_v7.0.lha / EngClock_v7.0 / EngClock7_Source / engclock_prefs.c < prev    next >
C/C++ Source or Header  |  1996-05-24  |  33KB  |  1,123 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : -- Unnamed --
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. //#include <proto/exec.h>
  18. //#include <proto/intuition.h>
  19. //#include <proto/gadtools.h>
  20. //#include <proto/graphics.h>
  21. //#include <proto/utility.h>
  22. //#include <proto/dos.h>
  23. #include <string.h>
  24. #include <stdio.h>
  25. #include <dos/dos.h>
  26. //#include <proto/asl.h>
  27. #include <libraries/asl.h>
  28. #include <clib/asl_protos.h>
  29. #include <clib/exec_protos.h>
  30. #include <clib/intuition_protos.h>
  31. #include <clib/gadtools_protos.h>
  32. #include <clib/graphics_protos.h>
  33. #include <clib/utility_protos.h>
  34. #include <clib/dos_protos.h>
  35. #include <dos/dostags.h>
  36.  
  37. #include "EngClock_Prefs.h"
  38.  
  39. #define PREFS_FILE "s:engclock.prefs"
  40. #define VERS 1 /* Version for backwards compat */
  41. #define ID "EngCPrefs"
  42. #define ENGLISH 1
  43. #define FRENCH 2
  44. #define SPANISH 3
  45.  
  46. short displevel(int code);
  47. short drawspecial(void);
  48. BOOL handlepgadgets(int iaddress, int code);
  49. short writeprefs(void);
  50. char *callasl(struct Window *win, char *title, char *initialdir);
  51. void adaptlanguage(void);
  52. void convertdate(int code);
  53. int prefsgui(void);
  54.  
  55. BPTR handle2;
  56. BOOL exit_flag2=FALSE;
  57. char buffer[400];
  58.  
  59. extern struct Window *win_p;
  60. extern struct TextAttr font1;
  61. extern struct Screen *pubscreen;
  62. extern char *publister(void);
  63. extern void msg(char *msg);
  64. extern void getdate(void);
  65. extern char *analysis(char *fname);
  66. extern int language;
  67. extern BOOL locale;
  68.  
  69. extern struct Library *AslBase;
  70. extern struct IntuitionBase *IntuitionBase;
  71. extern struct GfxBase *GfxBase;
  72. extern struct Library *UtilityBase;
  73. extern struct Library *GadToolsBase;
  74. extern struct Library *DiskfontBase;
  75. extern struct Library *IFFParseBase;
  76. extern struct Library *DataTypesBase;
  77. extern struct Library *TranslatorBase;
  78. extern struct Library *DOSBase;
  79.  
  80. char time1[50], time2[50];
  81.  
  82. int preset=1; /* Current preset for alarm events */
  83.  
  84. struct IntuiText level_text= {
  85.    1,0,JAM1,295,134,&font1,NULL,NULL };
  86.  
  87.  
  88. struct Event {
  89.     BOOL used;
  90.     int type;    /* Type of event */
  91.     int hours;    /* Time of event */
  92.     int minutes;
  93.     int timecode;
  94.     char message[256];
  95.     int day;
  96.     int month;
  97.     int year;
  98.     BOOL enabledate;
  99.     int freq;
  100. };
  101.  
  102. extern struct {
  103. /* Prefs structure used for preferences file format */
  104.  
  105.    char header[10];  /* I.D. Header */
  106.    int vers;         /* Version of preferences file */
  107.    int x;            /* X dimension of window when saved */
  108.    int y;            /* Y dimension of window when saved */
  109.    int width;        /* Width of window when saved */
  110.    int height;       /* Height of window when saved */
  111.    int planguage;    /* Language selected (menu) when saved, low pri */
  112.    int just;         /* Justification of text, 0=Left, 1=Centre, 2=Right */
  113.    short date;       /* Display date?, 0 = No, 1=Yes */
  114.    short wtf;         /* Window to front ? */
  115.    int time_col[8];
  116.    int date_col[8];
  117.    short autoadjust;       /* Use automatic adjustment on window ? */
  118.    char backdrop[256];  /* Backdrop image */
  119.    char pub[139];            /* Default public screen */
  120.     char accent[256];        /* Language file for tRanslate */
  121.     char tkey[100];
  122.     char hkey[100];
  123.     struct Event events[11];  /* For the alarm! */
  124.  
  125. }prefs;
  126.  
  127. int current_mode=2; /* Current selected colour mode */
  128.  
  129. APTR                   VisualInfo = NULL;
  130. struct Window         *Project0Wnd = NULL;
  131. struct Gadget         *Project0GList = NULL;
  132. struct Gadget         *Project0Gadgets[27];
  133. extern Class          *initGet( void );
  134. struct IClass         *getClass = NULL;
  135. struct _Object        *getImage = NULL;
  136. UWORD                  Project0Left = 0;
  137. UWORD                  Project0Top = 0;
  138. UWORD                  Project0Width = 560;
  139. UWORD                  Project0Height = 245;
  140. UBYTE                 *Project0Wdt = (UBYTE *)"EngClock Prefs";
  141.  
  142. UBYTE *Lang0Labels[] = {
  143.     (UBYTE *)"English",
  144.     (UBYTE *)"Français",
  145.     (UBYTE *)"Español",
  146.     NULL };
  147.  
  148. UBYTE *Just0Labels[] = {
  149.     (UBYTE *)"Left",
  150.     (UBYTE *)"Centre",
  151.     (UBYTE *)"Right",
  152.     NULL };
  153.  
  154. UBYTE *Type0Labels[] = {
  155.     (UBYTE *)"Requester",
  156.     (UBYTE *)"Sound File",
  157.     (UBYTE *)"AmigaDOS Command",
  158.     (UBYTE *)"Speech",
  159.     NULL };
  160.  
  161. struct TextAttr topaz8 = {
  162.     ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  163.  
  164. struct IntuiText Project0IText[] = {
  165.     1, 0, JAM1,213, 6, &topaz8, (UBYTE *)"Language:-", &Project0IText[1],
  166.     1, 0, JAM1,20, 6, &topaz8, (UBYTE *)"Justification:-", &Project0IText[2],
  167.     1, 0, JAM1,378, 6, &topaz8, (UBYTE *)"Alarm Settings:-", NULL };
  168.  
  169. UWORD Project0GTypes[] = {
  170.     SLIDER_KIND,
  171.     BUTTON_KIND,
  172.     BUTTON_KIND,
  173.     SLIDER_KIND,
  174.     SLIDER_KIND,
  175.     CHECKBOX_KIND,
  176.     MX_KIND,
  177.     MX_KIND,
  178.     CHECKBOX_KIND,
  179.     CHECKBOX_KIND,
  180.     STRING_KIND,
  181.     STRING_KIND,
  182.     GENERIC_KIND,
  183.     GENERIC_KIND,
  184.     SLIDER_KIND,
  185.     TEXT_KIND,
  186.     TEXT_KIND,
  187.     SLIDER_KIND,
  188.     CYCLE_KIND,
  189.     STRING_KIND,
  190.     CHECKBOX_KIND,
  191.     BUTTON_KIND,
  192.     GENERIC_KIND,
  193.     STRING_KIND,
  194.     GENERIC_KIND,
  195.     STRING_KIND,
  196.     STRING_KIND
  197. };
  198.  
  199. struct NewGadget Project0NGad[] = {
  200.     89, 123, 184, 11, (UBYTE *)"Colours", NULL, GD_ColourSlider, PLACETEXT_LEFT, NULL, NULL,
  201.     9, 226, 106, 14, (UBYTE *)"Save", NULL, GD_But_Use, PLACETEXT_IN, NULL, NULL,
  202.     438, 226, 106, 14, (UBYTE *)"Use", NULL, GD_But_Cancel, PLACETEXT_IN, NULL, NULL,
  203.     111, 105, 102, 13, (UBYTE *)"Time Colour", NULL, GD_Time_Colour, PLACETEXT_LEFT, NULL, NULL,
  204.     113, 89, 100, 13, (UBYTE *)"Date Colour", NULL, GD_Date_Colour, PLACETEXT_LEFT, NULL, NULL,
  205.     164, 72, 26, 11, (UBYTE *)"Display Date", NULL, GD_Check_Date, PLACETEXT_RIGHT, NULL, NULL,
  206.     278, 21, 17, 9, NULL, NULL, GD_Lang, PLACETEXT_LEFT, NULL, NULL,
  207.     19, 23, 17, 9, NULL, NULL, GD_Just, PLACETEXT_RIGHT, NULL, NULL,
  208.     16, 61, 26, 11, (UBYTE *)"Auto adjust", NULL, GD_Check_Auto, PLACETEXT_RIGHT, NULL, NULL,
  209.     164, 59, 26, 11, (UBYTE *)"WindowToFront", NULL, GD_WinFront, PLACETEXT_RIGHT, NULL, NULL,
  210.     118, 141, 162, 14, (UBYTE *)"Public Screen", NULL, GD_Pub, PLACETEXT_LEFT, NULL, NULL,
  211.     76, 159, 203, 14, (UBYTE *)"Backdrop", NULL, GD_Back, PLACETEXT_LEFT, NULL, NULL,
  212.     282, 141, 20, 14, NULL, NULL, GD_Pub_Get, 0, NULL, NULL,
  213.     282, 159, 20, 14, NULL, NULL, GD_Asl_Get, 0, NULL, NULL,
  214.     387, 33, 106, 11, (UBYTE *)"Event number", NULL, GD_A_Preset, PLACETEXT_ABOVE, NULL, NULL,
  215.     334, 73, 201, 13, (UBYTE *)"Time of event", NULL, GD_Time1, PLACETEXT_ABOVE, NULL, NULL,
  216.     334, 87, 201, 13, NULL, NULL, GD_Time2, 0, NULL, NULL,
  217.     333, 103, 201, 12, NULL, NULL, GD_Time_Set, 0, NULL, NULL,
  218.     335, 131, 201, 15, (UBYTE *)"Type of event", NULL, GD_Type, PLACETEXT_ABOVE, NULL, NULL,
  219.     334, 162, 185, 14, (UBYTE *)"Parameter", NULL, GD_Msg, PLACETEXT_ABOVE, NULL, NULL,
  220.     339, 47, 26, 11, (UBYTE *)"Enable Event", NULL, GD_Enable, PLACETEXT_RIGHT, NULL, NULL,
  221.     480,47, 60,11,(UBYTE *)"Date",NULL,GD_Date,PLACETEXT_IN,NULL,NULL,
  222.     524,162,20,14,NULL,NULL,GD_GetParam,0,NULL,NULL,
  223.     134,183,384,14,(UBYTE *)"Accent Filename",NULL,GD_Accent,PLACETEXT_LEFT,NULL,NULL,
  224.     524,183,20,14,NULL,NULL,GD_GetAccent,0,NULL,NULL,
  225.     126,202,150,14,(UBYTE *)"Window hotkey",NULL,GD_HotKey,PLACETEXT_LEFT,NULL,NULL,
  226.     392,202,150,14,(UBYTE *)"Talky hotkey",NULL,GD_TalkKey,PLACETEXT_LEFT,NULL,NULL
  227.     
  228. };
  229.  
  230. ULONG Project0GTags[] = {
  231.     (GTSL_Max), 7, (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  232.     (TAG_DONE),
  233.     (TAG_DONE),
  234.     (GTSL_Max), 1, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
  235.     (GTSL_Max), 1, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
  236.     (TAG_DONE),
  237.     (GTMX_Labels), (ULONG)&Lang0Labels[ 0 ], (GTMX_Spacing), 3, (TAG_DONE),
  238.     (GTMX_Labels), (ULONG)&Just0Labels[ 0 ], (GTMX_Spacing), 2, (TAG_DONE),
  239.     (TAG_DONE),
  240.     (TAG_DONE),
  241.     (GTST_MaxChars), 139, (TAG_DONE),
  242.     (GTST_MaxChars), 256, (TAG_DONE),
  243.     (TAG_DONE),
  244.     (TAG_DONE),
  245.     (GTSL_Min), 1, (GTSL_Max), 10, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  246.     (GTTX_Border), TRUE, (TAG_DONE),
  247.     (GTTX_Border), TRUE, (TAG_DONE),
  248.     (GTSL_Min),1,(GTSL_Max), 576, (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  249.     (GTCY_Labels), (ULONG)&Type0Labels[ 0 ], (TAG_DONE),
  250.     (GTST_MaxChars), 256, (TAG_DONE),
  251.     (TAG_DONE),
  252.     (TAG_DONE),
  253.     (TAG_DONE),
  254.     (GTST_MaxChars), 256, (TAG_DONE),
  255.     (TAG_DONE),
  256.     (GTST_MaxChars), 100, (TAG_DONE)
  257. };
  258.  
  259. int SetupScreen( void )
  260. {
  261.     if ( ! ( VisualInfo = GetVisualInfo( pubscreen, TAG_DONE )))
  262.         return( 2L );
  263.  
  264.     if ( ! ( getClass = initGet()))
  265.         return( 3L );
  266.  
  267.     if ( ! ( getImage = NewObject( getClass, NULL, GT_VisualInfo, VisualInfo, TAG_DONE )))
  268.         return( 4L );
  269.  
  270.     return( 0L );
  271. }
  272.  
  273. void CloseDownScreen( void )
  274. {
  275.     if ( getImage   ) {
  276.         DisposeObject( getImage );
  277.         getImage = NULL;
  278.     }
  279.  
  280.     if ( getClass   ) {
  281.         FreeClass( getClass );
  282.         getClass = NULL;
  283.     }
  284.  
  285.     if ( VisualInfo ) {
  286.         FreeVisualInfo( VisualInfo );
  287.         VisualInfo = NULL;
  288.     }
  289.  
  290. }
  291.  
  292. void Project0Render( void )
  293. {
  294.     UWORD        offx, offy;
  295.  
  296.     offx = Project0Wnd->BorderLeft;
  297.     offy = Project0Wnd->BorderTop;
  298.  
  299.     PrintIText( Project0Wnd->RPort, Project0IText, offx, offy );
  300. }
  301.  
  302. int OpenProject0Window( void )
  303. {
  304.     struct NewGadget    ng;
  305.     struct Gadget    *g;
  306.     UWORD        lc, tc;
  307.     UWORD        offx = pubscreen->WBorLeft, offy = pubscreen->WBorTop + pubscreen->RastPort.TxHeight + 1;
  308.  
  309.     if ( ! ( g = CreateContext( &Project0GList )))
  310.         return( 1L );
  311.  
  312.     for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  313.  
  314.         CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  315.  
  316.         ng.ng_VisualInfo = VisualInfo;
  317.         ng.ng_TextAttr   = &topaz8;
  318.         ng.ng_LeftEdge  += offx;
  319.         ng.ng_TopEdge   += offy;
  320.  
  321.         Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  322.  
  323.         if ( Project0GTypes[ lc ] == GENERIC_KIND ) {
  324.             g->Flags             |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  325.             g->Activation        |= GACT_RELVERIFY;
  326.             g->GadgetRender       = (APTR)getImage;
  327.             g->SelectRender       = (APTR)getImage;
  328.         }
  329.  
  330.         while( Project0GTags[ tc ] ) tc += 2;
  331.         tc++;
  332.  
  333.         if ( NOT g )
  334.             return( 2L );
  335.     }
  336.  
  337.     if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  338.                 WA_Left,    Project0Left,
  339.                 WA_Top,        Project0Top,
  340.                 WA_Width,    Project0Width,
  341.                 WA_Height,    Project0Height + offy,
  342.                 WA_IDCMP,    SLIDERIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|MXIDCMP|STRINGIDCMP|IDCMP_GADGETUP|TEXTIDCMP|CYCLEIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  343.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  344.                 WA_Gadgets,    Project0GList,
  345.                 WA_Title,    Project0Wdt,
  346.                 WA_ScreenTitle,    "EngClock Prefs",
  347.                 WA_PubScreen,    pubscreen,
  348.                 TAG_DONE )))
  349.     return( 4L );
  350.  
  351.     GT_RefreshWindow( Project0Wnd, NULL );
  352.  
  353.     Project0Render();
  354.  
  355.     return( 0L );
  356. }
  357.  
  358. void CloseProject0Window( void )
  359. {
  360.     if ( Project0Wnd        ) {
  361.         CloseWindow( Project0Wnd );
  362.         Project0Wnd = NULL;
  363.     }
  364.  
  365.     if ( Project0GList      ) {
  366.         FreeGadgets( Project0GList );
  367.         Project0GList = NULL;
  368.     }
  369. }
  370.  
  371. int prefsgui(void) {
  372.  
  373.    ULONG class, code, iaddress, offx, offy;
  374.     struct IntuiMessage *msg2;
  375.  
  376.    exit_flag2=FALSE;
  377.  
  378.    SetupScreen();
  379.     adaptlanguage();
  380.  
  381.    OpenProject0Window();
  382.  
  383.    displevel(0);
  384.    drawspecial();
  385.    if(prefs.planguage > 0)
  386.       GT_SetGadgetAttrs(Project0Gadgets[GD_Lang],Project0Wnd,NULL,GTMX_Active,prefs.planguage-1,TAG_END);
  387.  
  388.    GT_SetGadgetAttrs(Project0Gadgets[GD_Just],Project0Wnd,NULL,GTMX_Active,prefs.just,TAG_END);
  389.    GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Colour],Project0Wnd,NULL,GTSL_Level,prefs.time_col[0],TAG_END);
  390.    GT_SetGadgetAttrs(Project0Gadgets[GD_Date_Colour],Project0Wnd,NULL,GTSL_Level,prefs.date_col[0],TAG_END);
  391.    GT_SetGadgetAttrs(Project0Gadgets[GD_Check_Date],Project0Wnd,NULL,GTCB_Checked,prefs.date,TAG_END);
  392.    GT_SetGadgetAttrs(Project0Gadgets[GD_Check_Auto],Project0Wnd,NULL,GTCB_Checked,prefs.autoadjust,TAG_END);
  393.    GT_SetGadgetAttrs(Project0Gadgets[GD_Pub],Project0Wnd,NULL,GTST_String,prefs.pub,TAG_END);
  394.    GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  395.    GT_SetGadgetAttrs(Project0Gadgets[GD_WinFront],Project0Wnd,NULL,GTCB_Checked,prefs.wtf,TAG_END);
  396.  
  397.     convertdate(prefs.events[1].timecode);
  398.     GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
  399.     GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
  400.     GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[1].message,TAG_END);
  401.     GT_SetGadgetAttrs(Project0Gadgets[GD_Type],Project0Wnd,NULL,GTCY_Active,prefs.events[1].type,TAG_END);
  402.     GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Set],Project0Wnd,NULL,GTSL_Level,prefs.events[1].timecode,TAG_END);
  403.     GT_SetGadgetAttrs(Project0Gadgets[GD_Enable],Project0Wnd,NULL,GTCB_Checked,prefs.events[1].used,TAG_END);
  404.     GT_SetGadgetAttrs(Project0Gadgets[GD_HotKey],Project0Wnd,NULL,GTST_String,prefs.hkey,TAG_END);
  405.     GT_SetGadgetAttrs(Project0Gadgets[GD_TalkKey],Project0Wnd,NULL,GTST_String,prefs.tkey,TAG_END);
  406.  
  407.     if(locale) GT_SetGadgetAttrs(Project0Gadgets[GD_Lang],Project0Wnd,NULL,GA_Disabled,TRUE,TAG_END);
  408.  
  409.     GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  410.    GT_RefreshWindow(Project0Wnd,NULL);                                      
  411.  
  412.    offx=Project0Wnd->BorderLeft-4;
  413.    offy=Project0Wnd->BorderTop-11;
  414.  
  415.    SetAPen(Project0Wnd->RPort,prefs.time_col[0]);
  416.    RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
  417.    SetAPen(Project0Wnd->RPort,prefs.date_col[0]);
  418.    RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
  419.    SetAPen(Project0Wnd->RPort,1);
  420.  
  421.    while(1) {
  422.       Wait(1<<Project0Wnd->UserPort->mp_SigBit);
  423.       while(msg2=(struct IntuiMessage *)GT_GetIMsg(Project0Wnd->UserPort)) {
  424.          class=msg2->Class;
  425.          code=msg2->Code;
  426.          iaddress=(ULONG)msg2->IAddress;
  427.          GT_ReplyIMsg(msg2);
  428.  
  429.          switch(class) {
  430.             case CLOSEWINDOW:
  431.                goto cleanup;
  432.             break;
  433.             case GADGETUP:
  434.             case GADGETDOWN:
  435.             case MOUSEMOVE:
  436.                if(!handlepgadgets(iaddress,code))
  437.                   goto cleanup;
  438.                if(exit_flag2)
  439.                   goto cleanup;
  440.             break;
  441.             default:
  442.                //msg("Unknown msg!");
  443.             break;
  444.          }
  445.       }
  446.    }
  447.  
  448. cleanup:
  449.  
  450.    CloseProject0Window();
  451.    CloseDownScreen();
  452.  
  453.    return;
  454. }
  455.  
  456. BOOL handlepgadgets(int iaddress, int code) {
  457.    struct Gadget *gad;
  458.    struct StringInfo *si;
  459.     char pub[139];
  460.     char *tmp=NULL;
  461.     char stuff[200];
  462.     char olddir[200];
  463.    int cols=2, i=0;
  464.    UWORD offx, offy;
  465.     
  466.     BPTR thandle;   /* temp handle */
  467.  
  468.    offx=Project0Wnd->BorderLeft-4;
  469.    offy=Project0Wnd->BorderTop-11;
  470.  
  471.    gad=(struct Gadget *)iaddress;
  472.    si=(struct StringInfo *)gad->SpecialInfo;
  473.  
  474.    switch(gad->GadgetID) {
  475.       case GD_ColourSlider:
  476.          current_mode=code;
  477.          displevel(code);
  478.          for(i=0; i<code; i++) {
  479.            cols=cols*2;
  480.          }
  481.          GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Colour],Project0Wnd,NULL,GTSL_Max,(cols-1),GTSL_Level,prefs.time_col[code],TAG_END);
  482.          GT_SetGadgetAttrs(Project0Gadgets[GD_Date_Colour],Project0Wnd,NULL,GTSL_Max,(cols-1),GTSL_Level,prefs.date_col[code],TAG_END);
  483.          GT_RefreshWindow(Project0Wnd,NULL);
  484.  
  485.          SetAPen(Project0Wnd->RPort,prefs.time_col[code]);
  486.          RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
  487.          SetAPen(Project0Wnd->RPort,prefs.date_col[code]);
  488.          RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
  489.          SetAPen(Project0Wnd->RPort,1);
  490.  
  491.       break;
  492.       case GD_But_Use:
  493.          writeprefs();
  494.          exit_flag2=TRUE;
  495.          return(0);
  496.      break;
  497.       case GD_But_Cancel:
  498.          exit_flag2=TRUE;
  499.          return(0);
  500.       break;
  501.       case GD_Time_Colour:
  502.          SetAPen(Project0Wnd->RPort,code);
  503.          RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
  504.          SetAPen(Project0Wnd->RPort,1);
  505.          prefs.time_col[current_mode]=code;
  506.       break;
  507.       case GD_Date_Colour:
  508.          SetAPen(Project0Wnd->RPort,code);
  509.          RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
  510.          SetAPen(Project0Wnd->RPort,1);
  511.          prefs.date_col[current_mode]=code;
  512.       break;
  513.       case GD_Check_Date:
  514.          prefs.date=code;
  515.       break;
  516.         case GD_Pub_Get:
  517.             tmp=NULL;
  518.             tmp=publister();
  519.             if(tmp!=(char *)1234) {
  520.                 sprintf(pub,"%s",tmp);
  521.                 if(strcmp(pub,"")) {
  522.                     strcpy(prefs.pub,pub);
  523.                     GT_SetGadgetAttrs(Project0Gadgets[GD_Pub],Project0Wnd,NULL,GTST_String,prefs.pub,TAG_DONE);
  524.                     GT_RefreshWindow(Project0Wnd,NULL);
  525.                 }
  526.             }
  527.             break;
  528.       case GD_Check_Auto:
  529.          prefs.autoadjust=code;
  530.       break;
  531.         case GD_Date:
  532.             getdate();
  533.         break;
  534.       case GD_Lang:
  535.          prefs.planguage=(code+1);
  536.          language=code+1;
  537.       break;
  538.       case GD_Just:
  539.          prefs.just=code;
  540.       break;
  541.         case GD_WinFront:
  542.             prefs.wtf=code;
  543.         break;
  544.         case GD_Back:
  545.             strcpy(prefs.backdrop,si->Buffer);
  546.             thandle=Open(prefs.backdrop,MODE_OLDFILE);
  547.             if(!thandle) {
  548.                 DisplayBeep(NULL);
  549.                 strcpy(prefs.backdrop,"");
  550.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  551.             GT_RefreshWindow(Project0Wnd,NULL);
  552.             }
  553.             if(thandle) Close(thandle);
  554.         break;
  555.         case GD_Pub:
  556.             strcpy(prefs.pub,si->Buffer);
  557.          break;
  558.         case GD_Asl_Get:
  559.             // What was the old dir?
  560.             strcpy(olddir,"");
  561.             strcpy(stuff,prefs.backdrop);
  562.             for(i=strlen(stuff); i>-1; i--) {
  563.                 if(stuff[i]=='/') {
  564.                     stuff[i]=NULL;
  565.                     strcpy(olddir,stuff);
  566.                     stuff[i]='/';
  567.                     break;
  568.                 }        
  569.             }
  570.             // Did that work?
  571.             if(!(strcmp(olddir,""))) {
  572.                 // Ok, lets try :
  573.                 for(i=strlen(stuff); i>-1; i--) {
  574.                     if(stuff[i]==':') {
  575.                         stuff[i+1]=NULL;
  576.                         strcpy(olddir,stuff);
  577.                         stuff[i]='/';
  578.                     }        
  579.                 }
  580.             }
  581.             switch(language) {
  582.                 case ENGLISH:
  583.                 case FRENCH:
  584.                     tmp=callasl(Project0Wnd,"Pick a file for the backdrop",olddir);
  585.                 break;
  586.                 case SPANISH:
  587.                     tmp=callasl(Project0Wnd,"Elija una imagen cono fondo",olddir);
  588.                 break;
  589.                 default:
  590.                     tmp=callasl(Project0Wnd,"Pick a file for the backdrop",olddir);
  591.                 break;
  592.             }
  593.  
  594.             if(tmp) {
  595.                 sprintf(prefs.backdrop,"%s",tmp);
  596.                 thandle=Open(prefs.backdrop,MODE_OLDFILE);
  597.                 if(!thandle) {
  598.                     DisplayBeep(NULL);
  599.                     strcpy(prefs.backdrop,"");
  600.                     GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  601.                 GT_RefreshWindow(Project0Wnd,NULL);
  602.                 }
  603.                 if(thandle) Close(thandle);    
  604.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  605.              GT_RefreshWindow(Project0Wnd,NULL);        
  606.             }
  607.         break;
  608.         case GD_A_Preset:
  609.             preset=code;
  610.             convertdate(prefs.events[preset].timecode);
  611.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
  612.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
  613.             GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[preset].message,TAG_END);
  614.             GT_SetGadgetAttrs(Project0Gadgets[GD_Type],Project0Wnd,NULL,GTCY_Active,prefs.events[preset].type,TAG_END);
  615.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Set],Project0Wnd,NULL,GTSL_Level,prefs.events[preset].timecode,TAG_END);
  616.             GT_SetGadgetAttrs(Project0Gadgets[GD_Enable],Project0Wnd,NULL,GTCB_Checked,prefs.events[preset].used,TAG_END);
  617.             GT_RefreshWindow(Project0Wnd,NULL);            
  618.         break;
  619.         case GD_Time_Set:
  620.             /* code 0 = It's just gone one o'clock (am) */
  621.             /* If code is even, It's Just gone
  622.                 if code is odd, Its nearly */
  623.             /* Reset */
  624.             prefs.events[preset].hours=0;
  625.             prefs.events[preset].minutes=0;
  626.             prefs.events[preset].timecode=code;
  627.  
  628.             convertdate(code);
  629.             
  630.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
  631.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
  632.  
  633.             GT_RefreshWindow(Project0Wnd,NULL);
  634.         break;
  635.         case GD_Type:
  636.             prefs.events[preset].type=code;
  637.             
  638.         break;
  639.         case GD_Msg:
  640.             strcpy(prefs.events[preset].message,si->Buffer);    
  641.         break;
  642.         case GD_Enable:
  643.             prefs.events[preset].used=code;
  644.         break;
  645.         case GD_GetParam:
  646.             // What was the old dir?
  647.             strcpy(olddir,"");
  648.             strcpy(stuff,prefs.events[preset].message);
  649.             for(i=strlen(stuff); i>-1; i--) {
  650.                 if(stuff[i]=='/') {
  651.                     stuff[i]=NULL;
  652.                     strcpy(olddir,stuff);
  653.                     stuff[i]='/';
  654.                     break;
  655.                 }        
  656.             }
  657.             // Did that work?
  658.             if(!(strcmp(olddir,""))) {
  659.                 // Ok, lets try :
  660.                 for(i=strlen(stuff); i>-1; i--) {
  661.                     if(stuff[i]==':') {
  662.                         stuff[i+1]=NULL;
  663.                         strcpy(olddir,stuff);
  664.                         stuff[i]='/';
  665.                     }        
  666.                 }
  667.             }
  668.  
  669.             strcpy(prefs.events[preset].message,callasl(Project0Wnd,"Select a file as a parameter for your event",olddir));
  670.             if(prefs.events[preset].type==1)  // Sound
  671.                 strcpy(prefs.events[preset].message,analysis(prefs.events[preset].message));
  672.             GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[preset].message,TAG_END);
  673.             GT_RefreshWindow(Project0Wnd,NULL);
  674.  
  675.         break;
  676.         
  677.         case GD_Accent:
  678.             strcpy(prefs.accent,si->Buffer);
  679.             thandle=Open(prefs.accent,MODE_OLDFILE);
  680.             if(!thandle) {
  681.                 DisplayBeep(NULL);
  682.                 strcpy(prefs.accent,"");
  683.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  684.             GT_RefreshWindow(Project0Wnd,NULL);
  685.             }
  686.             if(thandle) Close(thandle);
  687.         break;
  688.         case GD_GetAccent:
  689.             tmp=callasl(Project0Wnd,"Choose your accent","LOCALE:Accents");
  690.             if(tmp) {
  691.                 sprintf(prefs.accent,"%s",tmp);
  692.                 thandle=Open(prefs.accent,MODE_OLDFILE);
  693.                 if(!thandle) {
  694.                     DisplayBeep(NULL);
  695.                     strcpy(prefs.accent,"");
  696.                     GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  697.                 GT_RefreshWindow(Project0Wnd,NULL);
  698.                 }
  699.                 if(thandle) Close(thandle);    
  700.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  701.              GT_RefreshWindow(Project0Wnd,NULL);        
  702.             }
  703.         break;
  704.         case GD_HotKey:
  705.             strcpy(prefs.hkey,si->Buffer);
  706.         break;
  707.         case GD_TalkKey:
  708.             strcpy(prefs.tkey,si->Buffer);
  709.         break;
  710.  
  711.  
  712.    }
  713.  
  714.    return(1);
  715. }
  716.  
  717. short displevel(int code) {
  718.    UWORD offx, offy;
  719.    int i=0, cols=2;
  720.    char text[5];
  721.  
  722.    offx=Project0Wnd->BorderLeft-4;
  723.    offy=Project0Wnd->BorderTop-11;
  724.  
  725.    for(i=0; i<code; i++) {
  726.       cols=cols*2;
  727.    }
  728.    sprintf(text,"%ld",cols);
  729.    level_text.IText=text;
  730.    SetAPen(Project0Wnd->RPort,0);
  731.    RectFill(Project0Wnd->RPort,293+offx,131+offy,320+offx,142+offy);
  732.    SetAPen(Project0Wnd->RPort,1);
  733.    PrintIText(Project0Wnd->RPort,&level_text,offx,offy);
  734.  
  735.    return(1);
  736. }
  737.  
  738. short drawspecial(void) {
  739.    UWORD offx, offy;
  740.  
  741.    offx=Project0Wnd->BorderLeft-4;
  742.    offy=Project0Wnd->BorderTop-11;
  743.  
  744.    /* Outline to time colour */
  745.  
  746.    Move(Project0Wnd->RPort,240+offx,98+offy);
  747.    Draw(Project0Wnd->RPort,300+offx,98+offy);
  748.  
  749.    Move(Project0Wnd->RPort,300+offx,98+offy);
  750.    Draw(Project0Wnd->RPort,300+offx,110+offy);
  751.  
  752.    Move(Project0Wnd->RPort,300+offx,110+offy);
  753.    Draw(Project0Wnd->RPort,240+offx,110+offy);
  754.  
  755.    Move(Project0Wnd->RPort,240+offx,110+offy);
  756.    Draw(Project0Wnd->RPort,240+offx,98+offy);
  757.  
  758.    /* Ouline to date colour */
  759.  
  760.    Move(Project0Wnd->RPort,240+offx,114+offy);
  761.    Draw(Project0Wnd->RPort,300+offx,114+offy);
  762.  
  763.    Move(Project0Wnd->RPort,300+offx,114+offy);
  764.    Draw(Project0Wnd->RPort,300+offx,126+offy);
  765.  
  766.    Move(Project0Wnd->RPort,300+offx,126+offy);
  767.    Draw(Project0Wnd->RPort,240+offx,126+offy);
  768.  
  769.    Move(Project0Wnd->RPort,240+offx,126+offy);
  770.    Draw(Project0Wnd->RPort,240+offx,114+offy);
  771.  
  772.    return(1);
  773. }
  774.  
  775. short writeprefs(void) {
  776.    int bytes;                         
  777.  
  778.    handle2=Open(PREFS_FILE,MODE_READWRITE);
  779.    if (!handle2) {
  780.       DisplayBeep(0L);
  781.       return(0); }
  782.  
  783.    /* First update the prefs structure */
  784.    prefs.vers=VERS; /* Current version of prefs file format */
  785.    strcpy(prefs.header,ID); /* Header */
  786.    prefs.x=win_p->LeftEdge;
  787.    prefs.y=win_p->TopEdge;
  788.    prefs.width=win_p->Width;
  789.    prefs.height=win_p->Height;
  790.    /* Note that the planguage element does not need to be updated */
  791.    bytes=FWrite(handle2,(char *)&prefs,1,sizeof(prefs));
  792.    if(bytes!=sizeof(prefs))
  793.       /* File was not written properly! */
  794.       DisplayBeep(NULL);
  795.  
  796.    Close(handle2);
  797.    return(0);
  798. }
  799.  
  800.  
  801. char *callasl(struct Window *win, char *title, char *initialdir) {
  802.     struct FileRequester *fr;
  803.     char buffer2[200];
  804.     struct TagItem tags[] = {
  805.         ASL_Hail,(ULONG)NULL,
  806.         ASL_Pattern,(ULONG)"#?",
  807.         ASL_FuncFlags,FILF_PATGAD,
  808.         ASL_Window,(ULONG)NULL,
  809.         ASL_Dir,(ULONG)NULL,
  810.         TAG_DONE
  811.     };
  812.  
  813.     if(!(AslBase=OpenLibrary("asl.library",0))) 
  814.         return(NULL);
  815.  
  816.     tags[0].ti_Data=(ULONG)title;
  817.     tags[3].ti_Data=(ULONG)win;
  818.     tags[4].ti_Data=(ULONG)initialdir;
  819.  
  820.     fr=(struct FileRequester *)AllocAslRequest(ASL_FileRequest,&tags[0]);
  821.     if(!fr) {
  822.         msg("Unable to open asl requester!");
  823.         CloseLibrary(AslBase);
  824.         return(0);
  825.     }
  826.  
  827.     if(!AslRequest(fr,NULL)) {
  828.         FreeAslRequest(fr);
  829.         CloseLibrary(AslBase);
  830.         return(0);
  831.     }
  832.  
  833.     sprintf(buffer,"%s",fr->rf_Dir);
  834.     sprintf(buffer2,"%s",fr->rf_File);
  835.  
  836.     if(buffer[strlen(buffer)-1]!=':' && buffer[strlen(buffer)-1]!='/' ) {
  837.         /* No device name nor trailing slash */
  838.         if(strcmp(buffer,"")) {
  839.             /* Make sure something is in there */
  840.             strcat(buffer,"/");
  841.         }
  842.     }
  843.  
  844.     strcat(buffer,buffer2);
  845.  
  846.  
  847.     FreeAslRequest(fr);
  848.  
  849.     CloseLibrary(AslBase);
  850.     return(&buffer[0]);
  851. }
  852.  
  853.  
  854. void adaptlanguage(void) {
  855.  
  856.     switch(language) {
  857.         case ENGLISH:
  858.         break;
  859.         case FRENCH:
  860.             Just0Labels[0]="Gauche";
  861.             Just0Labels[1]="Droit";
  862.             Just0Labels[2]="Centre";
  863.             Type0Labels[0]="Demander";
  864.             Type0Labels[1]="Bruit (IFF)";
  865.             Type0Labels[2]="Ordre (AmigaDOS)";
  866.             Type0Labels[3]="Parole";
  867.             Project0IText[0].IText="Langue";
  868.             Project0IText[1].IText="Justification";
  869.             Project0IText[2].IText="Réveille-matin:-";
  870.             Project0NGad[0].ng_GadgetText="Couleurs";
  871.             Project0NGad[1].ng_GadgetText="Sauver";
  872.             Project0NGad[2].ng_GadgetText="Emploi";
  873.             Project0NGad[3].ng_GadgetText="Couleur(date)";
  874.             Project0NGad[4].ng_GadgetText="Couleur(temp)";
  875.             Project0NGad[5].ng_GadgetText="Date ?";
  876.             Project0NGad[8].ng_GadgetText="Automatique";
  877.             Project0NGad[10].ng_GadgetText="écran (pub)"; 
  878.             Project0NGad[11].ng_GadgetText="Image";
  879.             Project0NGad[9].ng_GadgetText="Fenêtre á face";
  880.             Project0NGad[14].ng_GadgetText="Nombre";
  881.             Project0NGad[15].ng_GadgetText="Temps";
  882.             Project0NGad[18].ng_GadgetText="Type";
  883.             Project0NGad[19].ng_GadgetText="Texte";
  884.             Project0NGad[20].ng_GadgetText="Emploi cas?";
  885.             
  886.         
  887.         break;
  888.         case SPANISH:
  889.             Just0Labels[0]="A la Izquierdo";
  890.             Just0Labels[2]="A la Derecho";
  891.             Just0Labels[1]="Centrado";
  892.             Type0Labels[0]="Petición";
  893.             Type0Labels[1]="Sonido (IFF)";
  894.             Type0Labels[2]="Orden (AmigaDOS)";
  895.             Type0Labels[3]="Habla";    
  896.             Project0IText[0].IText="Lenguaje";
  897.             Project0IText[1].IText="Justificado Texto";
  898.             Project0IText[2].IText="Despertador";
  899.             Project0NGad[0].ng_GadgetText="Nº Colores";
  900.             Project0NGad[1].ng_GadgetText="Guardar";
  901.             Project0NGad[2].ng_GadgetText="Usar";
  902.             Project0NGad[3].ng_GadgetText="Color (Hora)";
  903.             Project0NGad[4].ng_GadgetText="Color (Fecha)";
  904.             Project0NGad[5].ng_GadgetText="Monstrar Fecha";
  905.             Project0NGad[8].ng_GadgetText="Auto Ajuste";
  906.             Project0NGad[10].ng_GadgetText="PantPública";
  907.             Project0NGad[11].ng_GadgetText="Imagen";
  908.             Project0NGad[9].ng_GadgetText="Primer Plano";
  909.             Project0NGad[14].ng_GadgetText="NÚmero";
  910.             Project0NGad[19].ng_GadgetText="Texto";
  911.             Project0NGad[20].ng_GadgetText="Suceso ?";
  912.             Project0NGad[21].ng_GadgetText="Fecha";
  913.             Project0NGad[15].ng_GadgetText="Tiempo";
  914.             Project0NGad[18].ng_GadgetText="Tipo";
  915.  
  916.             break;
  917.  
  918.     }
  919.  
  920. }
  921. void convertdate(int code) {
  922.     int tme,i,hours_count;
  923.     BOOL pm,odd=FALSE;
  924.  
  925.     tme=(code/2)*2;
  926.             if(code!=tme) 
  927.                 strcpy(time1,"Just gone ");
  928.             else {            
  929.                 strcpy(time1,"Nearly ");
  930.                 odd=TRUE;
  931.                 tme++;
  932.             };
  933.         hours_count=1;
  934.         while (tme > 24) {
  935.             tme=tme-24;
  936.             hours_count++;
  937.         }
  938.         if(hours_count==25) hours_count=1;        
  939.         tme=(tme/2)*5;
  940.         if(tme == 60) { tme=0; hours_count++; }
  941.  
  942.         pm=FALSE;
  943.         if(hours_count > 12) {
  944.             pm=TRUE;
  945.             hours_count+= - 12;
  946.         }
  947.         
  948.         if(hours_count == 12) {
  949.             if(pm) pm=FALSE; else pm=TRUE;
  950.         } 
  951.         if (tme !=0) strcat(time1,engnums[tme]);
  952.         prefs.events[preset].minutes=tme;
  953.         if(odd) prefs.events[preset].minutes+= -2;
  954.         
  955.         if (tme !=0) strcat(time1," ");
  956.         if (tme !=0) {
  957.             if(tme <= 30) 
  958.                 strcat(time1,"past ");
  959.             else {
  960.                 strcat(time1,"to ");
  961.             }
  962.         }
  963.         /* if(tme>30) prefs.events[preset].hours=hours_count+1;
  964.         else */
  965.         
  966.         prefs.events[preset].hours=hours_count;
  967.  
  968.         
  969.         if(prefs.events[preset].minutes==-2) {
  970.             prefs.events[preset].hours--;
  971.             prefs.events[preset].minutes=58;
  972.             if(prefs.events[preset].hours==-1) 
  973.                 prefs.events[preset].hours=23;
  974.         }
  975.         if(prefs.events[preset].hours==25)
  976.             prefs.events[preset].hours=0;
  977.     
  978.         if(tme>30 && hours_count==12) { 
  979.             hours_count=0;
  980.             prefs.events[preset].hours=0;
  981.         }
  982.     
  983.         if(hours_count==13) {
  984.             hours_count=1;
  985.             prefs.events[preset].hours=1;
  986.         }
  987.  
  988.         if(tme>30) strcat(time1,engnums[hours_count+1]);
  989.         else
  990.         strcat(time1,engnums[hours_count]);
  991.  
  992.         if(hours_count==11 && tme>30) {
  993.             if(pm) pm=FALSE;
  994.             else
  995.             pm=TRUE;
  996.         }
  997.  
  998.         if(!pm) {
  999.             if(hours_count==11) {
  1000.                 if(tme >30) {
  1001.                     prefs.events[preset].hours+=12;
  1002.                 }
  1003.                 if(hours_count==12) {
  1004.                     prefs.events[preset].hours+=12;
  1005.                 }
  1006.             }
  1007.         }
  1008.         if(pm==0 && prefs.events[preset].hours==12) prefs.events[preset].hours=0;
  1009.         if(pm) prefs.events[preset].hours+=12;
  1010.  
  1011.         if(prefs.events[preset].hours==25) prefs.events[preset].hours=1;
  1012.         if(prefs.events[preset].hours==24) prefs.events[preset].hours=0;
  1013.  
  1014.  
  1015.         
  1016.         if(pm) strcat(time1," (pm)"); else strcat(time1," (am)");
  1017.         
  1018.         
  1019.         switch(language) {
  1020.             case ENGLISH:
  1021.             break;
  1022.  
  1023.             case FRENCH:
  1024.             strcpy(time1,""); /* Clear out English */
  1025.             if(prefs.events[preset].hours>12) {
  1026.                 pm=TRUE;
  1027.                 prefs.events[preset].hours+=-12;
  1028.             } else 
  1029.                 pm=FALSE;
  1030.  
  1031.             tme=(prefs.events[preset].minutes/5)*5;
  1032.  
  1033.          if((prefs.events[preset].minutes-tme)>2)
  1034.             strcat(time1,"Bientôt ");
  1035.  
  1036.          if(prefs.events[preset].minutes<=32) {
  1037.             strcat(time1,engnums[prefs.events[preset].hours]);
  1038.          }
  1039.          else {
  1040.              if(prefs.events[preset].hours==12) {
  1041.                strcat(time1,engnums[1]); }
  1042.             else {
  1043.                  strcat(time1,engnums[prefs.events[preset].hours+1]);
  1044.             }
  1045.          }
  1046.  
  1047.          strcat(time1," heures");
  1048.  
  1049.          if(prefs.events[preset].minutes>2 & prefs.events[preset].minutes<58) {
  1050.             strcat(time1," ");
  1051.             if(prefs.events[preset].minutes>32)
  1052.                   strcat(time1,"moins ");
  1053.  
  1054.             if((prefs.events[preset].minutes-tme)<=2) 
  1055.                strcat(time1,engnums[(prefs.events[preset].minutes/5)*5]); 
  1056.             else 
  1057.                strcat(time1,engnums[((prefs.events[preset].minutes/5)+1)*5]); 
  1058.          }
  1059.          if((prefs.events[preset].minutes-tme)<=2)
  1060.             strcat(time1," passées");
  1061.  
  1062.             if(pm) {
  1063.                 prefs.events[preset].hours+=12;
  1064.                 strcat(time1," (pm)");
  1065.             } else 
  1066.                 strcat(time1," (am)");
  1067.  
  1068.             break;
  1069.  
  1070.             case SPANISH:
  1071.                 strcpy(time1,""); /* Clear out English */
  1072.         
  1073.                 if(prefs.events[preset].hours>12) {
  1074.                     pm=TRUE;
  1075.                     prefs.events[preset].hours+=-12;
  1076.                 } else 
  1077.                     pm=FALSE;
  1078.  
  1079.                 if(odd) strcpy(time1,"Aproximadamente ");
  1080.                 tme=(prefs.events[preset].minutes/5)*5;
  1081.             if(prefs.events[preset].minutes<=32)
  1082.                strcat(time1,engnums[prefs.events[preset].hours]);
  1083.             else {
  1084.                if(prefs.events[preset].hours==12)
  1085.                   strcat(time1,engnums[1]);
  1086.                else
  1087.                   strcat(time1,engnums[prefs.events[preset].hours+1]);
  1088.             }
  1089.          if(prefs.events[preset].minutes>2 & prefs.events[preset].minutes<58) {
  1090.             if(prefs.events[preset].minutes<=32)
  1091.                strcat(time1," y");
  1092.             else
  1093.                strcat(time1," menos");
  1094.             strcat(time1," ");
  1095.             if((prefs.events[preset].minutes-tme)<=2) {
  1096.                strcat(time1,engnums[(prefs.events[preset].minutes/5)*5]); }
  1097.             else {
  1098.                strcat(time1,engnums[((prefs.events[preset].minutes/5)+1)*5]); }
  1099.          }
  1100.             if(pm) {
  1101.                 prefs.events[preset].hours+=12;
  1102.                 strcat(time1," (pm)");
  1103.             } else 
  1104.                 strcat(time1," (am)");
  1105.             break;
  1106.             default:
  1107.             break;
  1108.         }
  1109.  
  1110.     if(strlen(time1) > 23) {
  1111.             for(i=0; i<22; i++) {
  1112.                 time2[i]=time1[24+i];
  1113.             }
  1114.             time2[i+1]=0L;
  1115.         } else
  1116.             strcpy(time2,"");
  1117.  
  1118. }
  1119.  
  1120.  
  1121. /* The meaning of life is simple, its just that I can't think of it at the
  1122. moment. */
  1123.